iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
自我挑戰組

golang初探系列 第 16

day16-Struct 結構介紹(一)

  • 分享至 

  • xImage
  •  

Struct

在 array 當中儲存的相同類型的元素,那如果需要儲存不同的類型的數據集合,這時候我們要討論到 Struct
在 Strcut 當中會將元素進行命名及定義類型,這裡我們稱為 fields
定義的名稱首字大小區分,Private 或者 Public

如何定義和初始化

package main

import (
	"fmt"
)

type Member struct {
	Name   string
	Age    int
	Gender string
}

func main() {
	//宣告 變數 p 為 Member 類型
	var p Member
	//未賦值 則 feild value 為預設值
	fmt.Println(p)
	p.Name = "Camille"
	p.Age = 18
	p.Gender = "女生"
	fmt.Println(p)
	//宣告及賦予值
	m := Member{
		Name:   "derek",
		Age:    20,
		Gender: "男生",
	}
	fmt.Println(m)
	// 不寫 feild 依序賦予值
	p2 := Member{"tom", 30, "男生"}
	fmt.Println(p2)
}

屬於 value type (值類型)

package main

import "fmt"

type Member struct {
	Name string
	Age  int
}

func main() {
	p := Member{
		Name: "john",
		Age:  11,
	}

	p2 := p
	p2.Name = "tom"
	//互相不引響
	fmt.Printf("%+v\n", p)
	fmt.Printf("%+v\n", p2)
	//pointer Member  類型
	pp := &p
	//pointer 賦值
	(*pp).Name = "Jack"
	fmt.Printf("%+v\n", p)
	fmt.Printf("%+v\n", pp)
	//也可以省略"*" 已經底層優化處理
	pp.Name = "Noah"
	pp.Age = 19
	fmt.Printf("%+v\n", p)
	fmt.Printf("%+v\n", pp)
	//使用 new 來產生 pointer Member  類型
	pp2 := new(Member)
	fmt.Printf("%T\n", pp2)
	pp2.Name= "Thomas"
}

匿名 Struct

常用於一次性

package main

import "fmt"

func main() {
	p := struct {
		Name string
		Age  int
	}{
		Name: "john",
		Age:  18,
	}
	fmt.Println(p)
}

Struct feild pointer

可以看出 Struct feild pointer 為連續分配

package main

import (
	"fmt"
)

type Point struct {
	x int
	y int
}
type Rect struct {
	leftUp, rightDown Point
}

func main() {
	p := Point{
		x: 1,
		y: 2,
	}
	fmt.Printf("point 地址: %p p.x point: %p p.y point: %p\n", &p, &p.x, &p.y)
	r1 := Rect{Point{1, 2}, Point{3, 4}}
	fmt.Printf("r1  地址: %p r1.leftUp point: %p  r1.leftUp.x point: %p r1.leftUp.y point: %p\n", &r1, &r1.leftUp, &r1.leftUp.x, &r1.leftUp.y)
	fmt.Printf("r1  地址: %p r1.rightDown point: %p  r1.rightDown .x point: %p r1.leftUp.y point: %p\n", &r1, &r1.leftUp, &r1.leftUp.x, &r1.leftUp.y)
}


上一篇
day15- func 函數介紹
下一篇
day17-Struct 結構介紹(二)
系列文
golang初探30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言